#导入copy这个模块(封装好的库函数)供调用，
import copy
class CPU:
    pass
class DISK:
    pass
class Computer:
    def __init__(self,cpu,disk):
        self.cpu=cpu
        self.disk=disk
#变量的赋值
#只是形成两个变量，实际上还是指向同一个对象
cpu1=CPU()
cpu2=cpu1
print(cpu1,id(CPU),id(cpu1))     #<__main__.CPU object at 0x000002A99CF70FD0>    2927499595248 2927506165712
print(cpu2,id(CPU),id(cpu2))     #同上一样


print('------------浅拷贝-------------')
#浅拷贝  调用 copy.py这个模块里的方法copy
#python中的拷贝一般都是浅拷贝，拷贝时，对象（computer）包含的子对象（cpu，disk）内容不拷贝，因此，源对象（computer）与拷贝对象（computer2）会引用同一个子对象

import copy
disk3=DISK()
cpu3=CPU()
computer=Computer(cpu3,disk3) #将创建的CPU DISK类对象当作创建Computer类的实例的初始化属性，使其属性中的类指针指向DISK CPU

computer2=copy.copy(computer) #通过导入的模块copy进行浅拷贝，并将拷贝的内容存放在computer2中
print (computer, computer.cpu, computer.disk)
print(computer2, computer2.cpu, computer2.disk)


print('------------深拷贝-------------')
#深拷贝  使用copy模块中的deepcopy函数，递归拷贝对象中包含的子对象，源对象和拷贝对象（computer3）所有的子对象(cpu3, disk3)也不相同
computer3=copy.deepcopy(computer)
print(computer, computer.cpu,computer.disk)
print(computer3, computer3.cpu,computer3.disk)

